<?php
//添加菜单
if (!class_exists('MABOU_Admin_Menu')) {
    class MABOU_Admin_Menu extends MABOU_Admin_Interface
    {


        public static $plugin_name; //插件名
        public static $plugin_version; //插件版本

        public static function run_menu($name, $version)
        {
            //传值
            self::$plugin_name = $name;
            self::$plugin_version = $version;
            //添加菜单
            add_action('admin_menu', array(__CLASS__, 'MaBou_menu'));

            //加载 CSS 和 JS 资源
            add_action('admin_enqueue_scripts', array(__CLASS__, 'load_admin_script'));

            //对js文件进行module接入
            add_filter('script_loader_tag', array(__CLASS__, 'refund_type_script'), 10, 2);

            //将传递的数据传给前端，测试用
            add_action('wp_ajax_test_data_callback',  array(__CLASS__, 'test_data_callback'));
            add_action('wp_ajax_nopriv_test_data_callback',  array(__CLASS__, 'test_data_callback'));
        }
        //创建菜单
        public static function MaBou_menu()
        {
            // 添加一个菜单到 WordPress 后台的“设置”菜单下
            add_plugins_page(
                '魔法悬赏设置',             // 要在此页面的浏览器窗口中显示的标题。
                '魔法悬赏',            // 要为此菜单项显示的文本
                'administrator',            // 哪种类型的用户可以看到此菜单项
                'MaBou_config',    // 展示在浏览器URL中的字段名
                array(__CLASS__, 'MaBou_display'),   // 呈现此菜单的页面时要调用的函数的名称
                '200.6'                         // 呈现此菜单的页面时的为重
            );
        }


        /**
         * 菜单内容，提供节点用
         */
        public static function MaBou_display()
        {
?>
            <div class="wrap">
                <!--标题-->
                <h1><?php echo esc_html(get_admin_page_title()); ?></h1>
                <div id='root'>出现未知错误，请联系管理员</div>
            </div>
<?php

        }
        /**
         * 准备传出的数据
         */
        public static function went_data()
        {
            $data = array(
                'site' => get_home_url(), //首页网址
                'ajaxurl' => admin_url('admin-ajax.php'),
                'data' => self::get_task_data(), //传递变量
                'option' => get_option(self::$option), //传递选项
                'table_task_name' => self::$table_task_name, //设备数据表名
                'table_submit_name' => self::$table_submit_name, //变更数据表名
            );
            return $data;
        }
        /**
         * 加载打包后的资源，并传递数据
         */
        public static function load_admin_script($hook)
        {
            $ver = self::$plugin_version;
            $name = self::$plugin_name;
            //是否是指定页面
            if ('plugins_page_MaBou_config' != $hook) {
                return;
            }

            //准备地址
            $index_css = plugin_dir_url(dirname(__DIR__)) . 'admin-vite/dist/index.css';
            $index_js = plugin_dir_url(dirname(__DIR__)) . 'admin-vite/dist/index.js';

            wp_enqueue_style($name, $index_css, array(), $ver, false);
            wp_enqueue_script($name, $index_js, array(), $ver, true);

            //传递数据给js
            wp_localize_script($name, 'dataLocal', self::went_data()); //传给vite项目


        }

        //对js文件进行module接入
        public static function refund_type_script($tag, $handle)
        {
            // 在这里判断需要添加 type 属性的 JS 文件，比如文件名包含 xxx.js
            if (strpos($tag, 'index.js') !== false) {
                // 在 script 标签中添加 type 属性
                $tag = str_replace('<script', '<script type="module"', $tag);
            }
            return $tag;
        }

        /**
         * 获取任务数据
         */
        public static function get_task_data()
        {
            global $wpdb;
            $table_name = $wpdb->prefix . self::$table_task_name;

            // 获取所有数据
            $result = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A);

            return $result;
        }
        /**
         * 撰写接口，提供数据给开发用
         */
        public static function test_data_callback()
        {


            // 处理请求，并生成响应数据
            $response = array(
                'state' => 'success', //内部状态
                'data' => self::went_data(),
                'message' => '请求成功',
            );

            // 返回响应数据
            wp_send_json($response);
        }
    }
}
